package g

import "math"

/*
 * @lc app=leetcode.cn id=7 lang=golang
 *
 * [7] 整数反转
 -231 <= x <= 231 - 1

 给你一个 32 位的有符号整数 x ，返回将 x 中的数字部分反转后的结果。
如果反转后整数超过 32 位的有符号整数的范围 [−2^31,  2^31 − 1] ，就返回 0。-2147483648,2147483647
假设环境不允许存储 64 位整数（有符号或无符号）。
*/
// @lc code=start
func reverse(x int) int {
	var symbol int = 1
	if x < 0 {
		symbol = -1
		x *= -1
	}
	var nums []int
	for {
		if x > 0 {
			nums = append(nums, x%10)
			x /= 10
		}
		if x == 0 {
			break
		}
	}
	var result int
	for i := 0; i < len(nums); i++ {
		num := powInt(10, len(nums)-i-1)
		if num > math.MaxInt32-result {
			return 0
		}
		result += nums[i] * num
	}

	return result * symbol
}

func powInt(x, y int) int {
	return int(math.Pow(float64(x), float64(y)))
}

// @lc code=end
